<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>字符串与正则表达式</title>

    <script type="text/javascript">
        // 创建正则表达式的对象
        // 第二个参数：匹配模式
        // i：忽略大小写   g：全局匹配模式
        var reg = new RegExp("a", "i");

        var str = "a";

        // 正则表达式的方法：test
        var res = reg.test(str);

        console.log(res);

        // 使用字面量来创建正则表达式
        //  语法：var 变量 = /正则表达式/匹配模式
        /* 
            使用字面量的方式创建更加简单
            使用构造函数更加灵活
        */

        /* 
            []里的内容也是或的关系
            [ab] == a|b
            [a-z] == 任意小写字符            
        */

        reg = /a/i;
        // console.log(reg.test(str));

        // 字符串和正则相关的方法
        var s = "1a2b3c4d5e6f hello abc";
        /* 
            split: 可以将一个字符串拆分为一个数组
            search：可以搜索字符串中是否含有指定内容, 输出的是起始索引；否则为-1
            match：可以根据正则表达式，从一个字符串中将符合条件的内容提取出来
                    默认情况下我们的match只会找第一个符合要求的内容，找到以后就停止检索，我们可以设置正则表达式为全局匹配模式，这样就会匹配到所有的内容
                    match()会将匹配到的内容封装到一个数组中返回，即使只查询到一个结果
            replace：可以将字符串中指定内容替换为新的内容，默认只替换第一个

        */
        
        res = s.split(/[a-zA-Z]/)
        res = s.split(/c/)
        console.log(res);

        res = s.search('hello') // 13
        console.log(res);

        res = s.match(/hello/g)
        console.log(res);

        res = s.replace(/[a]/g, "@_@")
        console.log(res);


        /* 
            正则表达式的语法
        */


        /* 
            量词
                只对他前边的一个内容起作用
                {n}刚好出现 n 次
                {m, n}出现 m-n 次
                {m,}出现 m 次及以上
                + 至少一个
                * 0个及以上
                ？0 或 1 个

                检查一个字符串中是否以a开头或结尾
                    ^a：检查开头
                    a$：检查结尾
                    如果在正则表达式中同时使用^ $则要求字符串必须完全符合正则表达式 ^a$：表示a
        */
        reg = /a{3}/
        reg = /(ab){3,}c/
        console.log(reg.test("abababc"));

        // 创建一个正则表达式：检查是否是手机号
        reg = /^1[3-9][0-9]{9}$/
        var phoneStr = "13567890123"
        
        console.log(reg.test(phoneStr));

        /* 
            检查一个字符串中是否含有.
            . 表示任意字符

            在正则表达式中使用 \ 作为转义字符
        */

        reg = /\./
        console.log("转义：" + reg.test('.'));


        /* 
            邮件的正则
        */
        reg = /\w{3,}(\.\w+)*@[A-z0-9]+(\.[A-z]{2,5}){1,2}/
        console.log("邮件" + reg.test("123@126.com"));


    </script>
</head>

<body>

</body>

</html>